//#include<iostream>
//using namespace std;
//int main()
//{
//	int n;
//	cin >> n;
//	while (n--)
//	{
//		int blood;
//		int case1, case2;
//		cin >> blood >> case1 >> case2;
//		while (blood > 0 && (case1 || case2))
//		{
//			if (case1 && blood / 2 + 10 < blood)
//			{
//				case1--;
//				blood = blood / 2 + 10;
//			}
//			else
//			{
//				if (case2 == 0)
//					break;
//				else
//				{
//					case2--;
//					blood -= 10;
//				}
//			}
//		}
//		if (blood <= 0)
//		{
//			cout << "YES" << endl;
//		}
//		else
//		{
//			cout << "NO" << endl;
//		}
//	}
//}
//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
//	int n;
//	cin >> n;
//	int* arr = new int[n];
//	for (int i = 0; i < n; i++)
//	{
//		cin >> arr[i];
//	}
//	int pre = -1;
//	int i = 0;
//	int max = 0;
//	int now = arr[0];
//	while (i < n)
//	{
//		while (i < n && arr[i] == pre)
//		{
//			i++;
//		}
//		if (i >= n)
//			break;
//		vector<int> v;
//		vector<int> v2;
//		now = arr[i];
//		int flag1 = 1;
//		int flag2 = 1;
//			int k = i;
//			while (k < n && abs(arr[k] - now) <= 1)
//			{
//				if (flag1 && arr[k] - now == 1)
//				{
//					flag2 = 0;
//					v.push_back(arr[k]);
//				}
//				else if (flag2 && arr[k] - now == -1)
//				{
//					flag1 = 0;
//					v2.push_back(arr[k]);
//				}
//				else 
//				{
//					v.push_back(now);
//					v2.push_back(now);
//				}
//				k++;
//			}
//			
//		
//		if (v2.size() > max)
//			max = v2.size();
//		if (v.size() > max)
//			max = v.size();
//		pre = now;
//		i++;
//	}
//	cout << max;
//}
#include<iostream>
using namespace std;
#include<stack>
#include<vector>
#include<string>
int main()
{
	string s;
	int n;
	cin >> n;
	cin >> s;
	vector<int> i;
	vector<int> i3;
	vector<int> i2;
	for (int k = 0; k < n; k++)
	{
		if (s[k] == '(')
			i3.push_back(k);
	}
	char c = 0;
	if (i3.size() >= n / 2)
		c = '(';
	else
		c = ')';
	if (n % 2 == 1)
		cout << "0";
	else
	{
		int flag = 1;
		int k = 0;
		for ( k= 0; k < n; k++)
		{
			if (s[k] == c)
				i.push_back(k);
			else
			{
				if (!i.empty())
				{
					i.pop_back();
				}
				else
				{
					flag = 0;
					break;
				}
			}
		}
		int flag2 = 0;
		if (flag == 0)
		{
			flag2 = 1;
			s[k] = c;
			flag = 1;
			for (k = 0; k < n; k++)
			{
				if (s[k] == c)
					i2.push_back(k);
				else
				{
					if (!i2.empty())
					{
						i2.pop_back();
					}
					else
					{
						flag2 = 0;
						break;
					}
				}
			}
			
		}
		if (flag)
		{
			if (i.size() == 0)
				cout << "0";
			else
				cout << i.size() + 1;
		}
		else if (flag2)
			cout << i2.size();
		else
			cout << "0";
	}
}
//#include<iostream>
//using namespace std;
//int findmin(int a[],int begin,int end)
//{
//	int min = 100000;
//	while (begin <= end)
//	{
//		if (a[begin] < min)
//			min = a[begin];
//		begin++;
//	}
//	return min;
//}
//int findmax(int a[], int begin, int end)
//{
//	int max=0;
//	while (begin <= end)
//	{
//		if (a[begin] > max)
//			max = a[begin];
//		begin++;
//	}
//	return max;
//}
//int main()
//{
//	int n;
//	cin >> n;
//	int* a = new int[n];
//	for (int i = 0; i < n; i++)
//	{
//		cin >> a[i];
//	}
//	int begin = 0;
//	int end = 0;
//	int size = end - begin + 1;
//	int k = 0;
//	while (k<n)
//	{
//		int max = findmax(a, begin, end);
//		int min = findmin(a, begin, end);
//		while (k < n && abs(a[k]- min)<=1 &&abs( a[k] - max)<=1)
//		{
//			if (a[k] < min)
//				min = a[k];
//			if (a[k] > max)
//				max = a[k];
//			end++;
//			k++;			
//		}
//		if (size < end - begin )
//			size = end - begin ;
//		int pre = a[begin];
//		while(pre==a[begin])
//		begin++;
//	}
//	cout << size;
//}